package com.da.javatest.thread.juc.locksupport;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;

/**
 * @author chenlida
 * @date 2020/7/11 20:20
 * 唤醒方法在等待方法之前执行，线程也能够被唤醒，这点是另外2中方法无法做到的。Object和Condition中的唤醒必须在等待之后调用，线程才能被唤醒。
 * 而LockSupport中，唤醒的方法不管是在等待之前还是在等待之后调用，线程都能够被唤醒。
 */
public class LockSupport3 {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread() + " start!");
            LockSupport.park();
            System.out.println(Thread.currentThread() + " end!");
        });
        thread.start();
        LockSupport.unpark(thread);
        System.out.println("unpark执行完毕");
    }
}
